#include <gtkmm.h>
#include <gtkmm/enums.h>
#include <gtkmm/scrollbar.h>
class MyWindow : public Gtk::Window {
public:
    MyWindow() {
        set_title("GtkScrollbar Example");  // 设置窗口标题
        set_default_size(300, 100);  // 设置窗口默认大小

        Gtk::Box* vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10));  // 创建垂直盒子容器
        add(*vbox);  // 将盒子容器添加到窗口

        // 创建调整对象
        adjustment = Gtk::Adjustment::create(0.0, 0.0, 100.0, 1.0, 10.0, 10.0);

        // 创建滚动条控件
        scrollbar = Gtk::manage(new Gtk::Scrollbar());
        scrollbar->set_adjustment(adjustment);  // 设置滚动条的调整对象

        scrollbar->signal_value_changed().connect(sigc::mem_fun(*this, &MyWindow::on_value_changed));  // 连接值改变事件的信号处理函数

        vbox->pack_start(*scrollbar);  // 将滚动条添加到盒子容器中

        label = Gtk::manage(new Gtk::Label("Value: 0"));  // 创建标签控件
        vbox->pack_start(*label);  // 将标签添加到盒子容器中

        show_all_children();  // 显示所有子控件
    }

    virtual ~MyWindow() {}

protected:
    // 滚动条值改变事件处理函数
    void on_value_changed() {
        double value = scrollbar->get_value();  // 获取滚动条的当前值
        label->set_text("Value: " + std::to_string(static_cast<int>(value)));  // 更新标签显示滚动条的当前值
    }

    Glib::RefPtr<Gtk::Adjustment> adjustment;  // 调整对象
    Gtk::Scrollbar* scrollbar;  // 滚动条控件指针
    Gtk::Label* label;  // 标签控件指针
};

int main(int argc, char *argv[]) {
    auto app = Gtk::Application::create(argc, argv, "com.example.GtkScrollbarExample");  // 创建 GTK 应用程序实例

    MyWindow window;  // 创建主窗口实例

    return app->run(window);  // 运行应用程序
}

